refs: Fix a logic error
authorMathnerd314 <mathnerd314.gph+hs@gmail.com>
Sat, 18 Jun 2016 17:06:31 +0000 (11:06 -0600)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 22 Jun 2016 20:15:42 +0000 (20:15 +0000)
I encountered the Opening remotes/ dir error with some broken pull code, and this fixes it.

Closes: #358
Approved by: cgwalters

src/libostree/ostree-repo-refs.c

index 1eb50e0c579bfff945ceb095e445b0770ece3a98..b18d838e013ed3eb25cd43c14ee3deaf3a6e565b 100644 (file)
@@ -809,8 +809,10 @@ _ostree_repo_write_ref (OstreeRepo    *self,
             goto out;
         }
 
-      if (!glnx_opendirat (refs_remotes_dfd, remote, TRUE, &dfd, error))
+      dfd = glnx_opendirat_with_errno (refs_remotes_dfd, remote, TRUE);
+      if (dfd < 0 && (errno != ENOENT || rev != NULL))
         {
+          glnx_set_error_from_errno (error);
           g_prefix_error (error, "Opening remotes/ dir %s: ", remote);
           goto out;
         }
@@ -818,13 +820,16 @@ _ostree_repo_write_ref (OstreeRepo    *self,
 
   if (rev == NULL)
     {
-      if (unlinkat (dfd, ref, 0) != 0)
+      if (dfd >= 0)
         {
-          if (errno != ENOENT)
-            {
-              glnx_set_error_from_errno (error);
-              goto out;
-            }
+          if (unlinkat (dfd, ref, 0) != 0)
+          {
+            if (errno != ENOENT)
+              {
+                glnx_set_error_from_errno (error);
+                goto out;
+              }
+          }
         }
     }
   else